/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package libreriaTicket.dao;

import conexion.BD;
import conexion.SqlFormat;
import java.util.ArrayList;
import libreriaTicket.entity.Comuna;
import libreriaTicket.entity.Evento;
import libreriaTicket.entity.PrecioUbicacion;
import libreriaTicket.entity.Ticket;
import libreriaTicket.entity.TipoUbicacion;
import libreriaTicket.entity.Ubicacion;
import libreriaTicket.entity.Usuario;
import libreriaTicket.entity.Venta;

/**
 *
 * @author moises
 */
public class DaoVenta {

    public static int sqlInsert(Venta venta) {
        try {

            String sql = "insert into venta(fecha,total,usuario) values(curdate(),0,'asdf')";
            String sqlRecovery = "select last_insert_id() as venta";

            BD.getInstance().sqlEjecutar(sql);
            BD.getInstance().sqlQuery(sqlRecovery);

            if (!BD.getInstance().sqlFetch()) {
                return 0;
            }

            int codVenta = BD.getInstance().getInt("venta");

            return codVenta;


        } catch (Exception e) {
        }
        return 0;
    }
    
    public static boolean transaccion(Venta venta,ArrayList<Ticket> tickets)
    {
        try {
            int codVenta = venta.getIdVenta();
            ArrayList<String> idTickets = new ArrayList<String>();
            
            String sqlRecovery = "select last_insert_id() as venta";
           
            String sqlPrecioBase = "select precio from evento where id = " + tickets.get(0).getEvento().getIdEvento();
            BD.getInstance().sqlQuery(sqlPrecioBase);
            BD.getInstance().sqlFetch();
            int precioBase = BD.getInstance().getInt("precio");
            
            for(Ticket t : tickets)
            {
                String sqlPrecioUbicacion = "select valor from precio_ubicacion where ubicacion_id = " + t.getUbicacion().getIdUbicacion();
                BD.getInstance().sqlQuery(sqlPrecioUbicacion);
                BD.getInstance().sqlFetch();
                int precioUbi = BD.getInstance().getInt("valor");
                int precioFinal = precioBase + precioUbi;
                String sqlTickets = "insert into ticket(precio,fecha_emision,id_evento,ubicacion) values("+precioFinal+",curdate(),"+t.getEvento().getIdEvento()+","+t.getUbicacion().getIdUbicacion()+")";
                BD.getInstance().sqlEjecutar(sqlTickets);
                
                BD.getInstance().sqlQuery(sqlRecovery);
                if (!BD.getInstance().sqlFetch()) {
                return false;
            }
                int ultimoIdInsertado = BD.getInstance().getInt("venta");
                idTickets.add(String.valueOf(ultimoIdInsertado));
            }
            
            for(String d: idTickets){
                
                SqlFormat sql =  new SqlFormat(SqlFormat.INSERTAR, "detalle_venta");
                sql.addField("venta_id", codVenta);
                sql.addField("ticket_id", d);
                
                BD.getInstance().sqlEjecutar(sql.crearInstruccion());
                
            }
            
            
            
        } catch (Exception e) {
        }
        return false;
    }

    public static ArrayList<PrecioUbicacion> detalleEvento(Evento evento) {

        ArrayList<PrecioUbicacion> detalleEvento = new ArrayList<PrecioUbicacion>();
        try {
            String sql = "select precio_ubicacion.evento_id as idEvento, precio_ubicacion.ubicacion_id as idUbicacion, precio_ubicacion.valor as precio,\n"
                    + "evento.nombre,evento.fecha,evento.imagen,evento.hora,ubicacion.id as idUbicacion, ubicacion.cantidad,tipo_ubicaciones.nombre as nombreUbicacion\n"
                    + "from evento,precio_ubicacion,ubicacion,tipo_ubicaciones\n"
                    + "where precio_ubicacion.evento_id = evento.id and precio_ubicacion.ubicacion_id = ubicacion.id\n"
                    + "and ubicacion.id_tipo = tipo_ubicaciones.id and evento.id = "+evento.getIdEvento();

            BD.getInstance().sqlQuery(sql);
            while (BD.getInstance().sqlFetch()) {

                PrecioUbicacion precioUbicacion = new PrecioUbicacion();
                Evento event = new Evento();
                
                TipoUbicacion tipoUbicacion = new TipoUbicacion();
                Ubicacion ubicacion = new Ubicacion();

                //--Se rellenan las clases
                event.setNombre(BD.getInstance().getString("nombre"));
                event.setFechaEvento(BD.getInstance().getString("fecha"));
                event.setHora(BD.getInstance().getString("hora"));
                event.setIdEvento(BD.getInstance().getInt("idEvento"));
                event.setImagen(BD.getInstance().getString("imagen"));
                
                //--ubicacion
                ubicacion.setCantidad(BD.getInstance().getInt("cantidad"));
                ubicacion.setIdUbicacion(BD.getInstance().getInt("idUbicacion"));

                //--Tipo ubicaciones
                tipoUbicacion.setNombre(BD.getInstance().getString("nombreubicacion"));

                ubicacion.setTipoUbicacion(tipoUbicacion);
                precioUbicacion.setUbicacion(ubicacion);
                precioUbicacion.setEvent(event);
                precioUbicacion.setPrecio(BD.getInstance().getInt("precio"));

                detalleEvento.add(precioUbicacion);

            }

            return detalleEvento;


        } catch (Exception e) {
        }

        return null;
    }
    
    public static ArrayList<Venta> sqlSelectAll(){
        
        try{BD.getInstance().sqlQuery(SqlFormat.SelectAll("venta"));
        ArrayList<Venta> ventas = new ArrayList<Venta>();
        Venta venta = new Venta();
        while(BD.getInstance().sqlFetch()){
            venta.setFechaVenta(BD.getInstance().getString("fecha"));
            venta.setPrecioTotal(BD.getInstance().getInt("total"));
            venta.setIdVenta(BD.getInstance().getInt("id"));
            venta.setUsuario(new Usuario(BD.getInstance().getString("usuario")));
            
            ventas.add(venta);
            
        }
        
        return ventas;
        }
        catch(Exception ex){
        
        }
        
        return null;
    }
    public static void main(String[] args) {
        // TODO code application logic here
        
        Venta venta = new Venta();
        venta.setIdVenta(5);
        
        Ticket ticket2 = new Ticket();
        ticket2.setEvento(new Evento(1));
        ticket2.setUbicacion(new Ubicacion(1));
        
        Ticket ticket3 = new Ticket();
        ticket3.setEvento(new Evento(1));
        ticket3.setUbicacion(new Ubicacion(1));
        
        Ticket ticket5 = new Ticket();
        ticket5.setEvento(new Evento(1));
        ticket5.setUbicacion(new Ubicacion(1));
       
        
        ArrayList<Ticket> tickets = new ArrayList<Ticket>();
        tickets.add(ticket5);
        tickets.add(ticket3);
        tickets.add(ticket5);
        
        DaoVenta.transaccion(venta, tickets);
        
       DaoVenta.detalleEvento(new Evento(1));
        
    }
    /* public static boolean sqlUpdate(Venta venta)
     {
     try {
           
     SqlFormat sql = new SqlFormat(SqlFormat.ACTUALIZAR,"venta");
     sql.where("venta", venta.getUsuario());
     sql.addField("rut", venta.getRut());
     sql.addField("dv", venta.getDv());
     sql.addField("password", venta.getPassword());
     sql.addField("apeMaterno", venta.getApellidoMaterno());
     sql.addField("apePaterno", venta.getApellidoPaterno());
     sql.addField("direccion", venta.getUsuario());
     sql.addField("nombre", venta.getUsuario());
     sql.addField("codComuna",venta.getComuna().getIdComuna());
            
     return BD.getInstance().sqlEjecutar(sql.crearInstruccion());
            
            
     } catch (Exception e) {
     }
     return false;
     }
     public static boolean sqlDelete(Venta venta)
     {
     try {
     SqlFormat sql = new SqlFormat(SqlFormat.ELIMINAR,"venta");
     sql.where("rut", venta.getRut());
            
     return BD.getInstance().sqlEjecutar(sql.crearInstruccion());
            
            
     } catch (Exception e) {
     }
     return false;
     }
     public static Venta sqlSelect(Venta venta)
     {
        
     try {
     Venta user = new Venta();
     SqlFormat sql = new SqlFormat(SqlFormat.SELECCIONAR,"venta");
     sql.where("venta",venta.getUsuario());
            
     BD.getInstance().sqlQuery(sql.crearInstruccion());
     if(!BD.getInstance().sqlFetch()) return null;
            
     user.setUsuario(BD.getInstance().getString("venta"));
     user.setNombre(BD.getInstance().getString("nombre"));
     user.setRut(BD.getInstance().getInt("rut"));
     user.setDv(BD.getInstance().getChar("dv"));
     user.setPassword(BD.getInstance().getString("password"));
     user.setApellidoPaterno(BD.getInstance().getString("apePaterno"));
     user.setApellidoMaterno(BD.getInstance().getString("apeMaterno"));
     user.setComuna(new Comuna(Integer.parseInt(BD.getInstance().getString("comuna"))));
     user.setDireccion(BD.getInstance().getString("direccion"));
            
     return user;
     } catch (Exception e) {
     }
     return null;
     }
    
     public static ArrayList<Venta> sqlSelectAll()
     {
     ArrayList<Venta> usuarios = new ArrayList<Venta>();
        
        
     try {
     BD.getInstance().sqlQuery(SqlFormat.SelectAll("venta"));
     while(BD.getInstance().sqlFetch()) {
     Venta user = new Venta();
     user.setUsuario(BD.getInstance().getString("venta"));
     user.setNombre(BD.getInstance().getString("nombre"));
     user.setRut(BD.getInstance().getInt("rut"));
     user.setDv(BD.getInstance().getChar("dv"));
     user.setPassword(BD.getInstance().getString("password"));
     user.setApellidoPaterno(BD.getInstance().getString("apellidoPaterno"));
     user.setApellidoMaterno(BD.getInstance().getString("apellidoMaterno"));
     user.setComuna(new Comuna(Integer.parseInt(BD.getInstance().getString("codComuna"))));
     //user.setDireccion(BD.getInstance().getString("direccion"));
            
     usuarios.add(user);
            
     }
     return usuarios;
     } catch (Exception e) {
     }
     return null;
     }
    
     public static boolean loguin(Venta venta)
     {
     try {
     String sql = "select count(*) where venta = '" + venta.getUsuario() +"' and password = '"+venta.getPassword()+"'";
     BD.getInstance().sqlQuery(sql);
            
     if(!BD.getInstance().sqlFetch()) return false;
            
     if(BD.getInstance().getInt(sql) == 1) return true;//Si el venta existe retorna 1
            
     } catch (Exception e) {
     }
        
     return false;
     }*/
}
